CVWO Riding on Rails 2021/2022 Final Submission
By Lee Zong Xun
This submission contains my thoughts on what I have accomplished and a short user guide. Other documentation and implementation details can be found here on Github. Alternatively, you may visit this Docusaurus website.
Github Submission Repo: Frontend Repo, Backend Repo
Thoughts
I would have laughed at myself if I had told myself before the winter break that I would be designing a Progressive Web Application from scratch. I had no idea what a PWA was! Time and again, I am greeted with a variety of roadblocks and unknown issues. Days and weeks pass with little discernible movement on the situation at hand.
With absolutely no experience in Ruby on Rails, I dedicated the majority of my time during the first month or so familiarizing myself with Ruby syntax and studying the best possible practices for scaling the backend. I read the documentation thoroughly, trying out each and every example myself, and finally, with a plan in place, I began to work on the backend application. The entire process was rather smooth, except for setting up the project as I was a Windows user and have never used Linux in my life. Thankfully, with docker, the entire process of setting up was as easy as just a single command. Thanks, docker!
When the backend application is completed, I begin to focus on the Frontend. Since I had prior web development knowledge, I was rather adept at using Javascript and hence, the choice of using it as the main programming language of choice. The CSS Library I have chosen is Material UI for its simplicity and fast proto-typing with its pre-built components. Material UI is based on the idea of Styled Components, which is something I am very familiar with.
Day by day, I'm learning, applying, and watching the application expand. The experience is nothing short of exciting and exhilarating. I wish to thank CVWO for this amazing opportunity and I am extremely glad that I took it up. Not only has the experience confirmed what I already knew, but it has also provided me with access to a variety of new and innovative libraries.
Accomplishments
An understanding of Docker and why it's useful
Without Docker, the entire development process for the backend application would have been a nightmare. I had many issues and bugs surfacing that weren’t even listed on StackOverflow. Docker follows closely to the philosophy of developing once, run anywhere. With seamless portability, this allows applications to run across any desktops, data center, and cloud environment, all without any modification.
An understanding of the web development cycle
More than anything else, I have come to appreciate the software development cycle. With prior experience in web development in teams, I am familiar with the various software development models. In this particular assignment, I have chosen to adopt the Waterfall model. The Waterfall Model is particularly useful for this assignment as it is a relatively small project and there are specific deliverables as stated in the assignment requirements. With detailed ideation and design, it can significantly help to reduce development time and make it easy to add new features.
Refactoring to TypeScript
Despite my familiarity with Javascript, converting the program to Typescript was extremely buggy, and the entire process was fraught with uncertainty - I couldn't be sure I wasn't heading down a rabbit hole, and I was short on time. Despite these difficulties, the switch to Typescript proved to be a pleasant surprise. Several unexpected and minor flaws surfaced during the process, and I discovered how many hidden bugs Typescript alone had managed to disclose. Definitely adding this one to my future projects!
Becoming an independent learner
Completing this application is something I'm very proud of. Although two months is not a long time, I believe I have matured significantly throughout this period. I had simply wanted to finish the basic functionality at first. But, with a plan and a goal in mind, the product gradually progresses to level 4, and eventually, I am able to execute the majority, if not all, of the features that I had envisioned. I'm incredibly proud of how far I've come in this regard.
User Guide
The user guide is removed to avoid duplication. You may refer to this instead.